import instrucciones.Instruccion;

import java.util.Scanner;


public class Ensamblador {
	private static Scanner entrada;

	public static void main(String[] args) {
		
		String linea = null; //Linea leida del archivo
		String nombreArchivoEntrada;
		String nombreArchivoSalida;
		entrada = new Scanner(System.in);
		LectorDeArchivo lector = new LectorDeArchivo();	
		EscritorArchivo escritor = new EscritorArchivo();
		Identificador identificador = new Identificador();
		
		
		System.out.println("Ingrese nombre del archivo .asm");
		nombreArchivoEntrada = entrada.nextLine();
		System.out.println("Ingrese nombre del archivo de salida .coe");
		nombreArchivoSalida = entrada.nextLine();
		
		if((lector.AbrirArchivoEntrada(nombreArchivoEntrada)) && (escritor.AbrirArchivoSalida(nombreArchivoSalida)))
		{
			escritor.EscribirLinea("memory_initialization_radix=16", ';');
			escritor.EscribirLinea("memory_initialization_vector", '=');

			Instruccion instruccion;
			
			while((linea = lector.LeerLinea()) != null)
			{
				if(!identificarComentario(linea))
				{
					instruccion = identificador.ProcesarLinea(linea);
					instruccion.Transformar();
					escritor.EscribirCodigo(instruccion.getCodigoMaquina());
				}
			}
			escritor.Corregir();
			// Al finalizar operacion, cerrar archivos
			lector.CerrarArchivoEntrada();
		}
	}

	static boolean identificarComentario(String linea)
	{
		if(linea.trim().startsWith(";"))
			return true;
		else return false;
	}
}
